using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._CartographyTools._MapSeries
{
    /// <summary>
    /// <para>Calculate UTM Zone</para>
    /// <para>Calculates the UTM zone of each feature based on the center point and stores this spatial reference string in a specified field. This field can be used with a spatial map series  to update the spatial reference to the correct UTM zone for each map.</para>
    /// <para>根据中心点计算每个要素的 UTM 区域，并将此空间参考字符串存储在指定字段中。此字段可用于空间地图系列，以将空间参考更新为每个地图的正确 UTM 区域。</para>
    /// </summary>    
    [DisplayName("Calculate UTM Zone")]
    public class CalculateUTMZone : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CalculateUTMZone()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The input feature layer.</para>
        /// <para>输入要素图层。</para>
        /// </param>
        /// <param name="_in_field">
        /// <para>UTM Zone Field</para>
        /// <para>The string field that stores the spatial reference string for the coordinate system. The field should have sufficient length (more than 600 characters) to hold the spatial reference string.</para>
        /// <para>用于存储坐标系的空间参考字符串的字符串字段。字段应具有足够的长度（超过 600 个字符）来保存空间参考字符串。</para>
        /// </param>
        public CalculateUTMZone(object _in_features, object _in_field)
        {
            this._in_features = _in_features;
            this._in_field = _in_field;
        }
        public override string ToolboxName => "Cartography Tools";

        public override string ToolName => "Calculate UTM Zone";

        public override string CallName => "cartography.CalculateUTMZone";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_features, _in_field, _out_features];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The input feature layer.</para>
        /// <para>输入要素图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>UTM Zone Field</para>
        /// <para>The string field that stores the spatial reference string for the coordinate system. The field should have sufficient length (more than 600 characters) to hold the spatial reference string.</para>
        /// <para>用于存储坐标系的空间参考字符串的字符串字段。字段应具有足够的长度（超过 600 个字符）来保存空间参考字符串。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("UTM Zone Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_field { get; set; }


        /// <summary>
        /// <para>Output Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_features { get; set; }


        public CalculateUTMZone SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}